iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
Software Development

FastAPI 開發筆記:從新手到專家的成長之路系列 第 5

[Day 05] 後端開發的得力助手:Postman

  • 分享至 

  • xImage
  •  

前言

隨著 API 的開發,我們會越來越需要頻繁地測試我們所寫的 API,而在過去這幾天我們測試API的方法,都是直接用瀏覽器進行測試,雖然不用額外安裝軟體,流程也很簡單 (打開瀏覽器輸入網址就好),但同時也有著巨大的限制,那就是

「只能打 GET 的 API」

除此之外,要在網址列來回調整路由、參數也不容易,因此接下來我們要來介紹一個測試 API 的工具 — Postman

Postman

有請 chatGPT 介紹一下 Postman

POSTMAN 是一個強大的開發工具,用於簡化API測試和管理。它提供了一個直觀的用戶界面,讓開發人員輕鬆創建、測試和調試API請求。POSTMAN允許您快速構建各種HTTP請求,包括GET、POST、PUT和DELETE等,並且可以輕鬆設置諸如標頭、參數、身份驗證等請求屬性。此外,POSTMAN還提供了集成的自動化測試工具,讓您輕鬆創建測試腳本,執行集成測試和性能測試。POSTMAN的集合功能允許您組織和共享API請求和測試集,並支持團隊協作。總之,POSTMAN是一個不可或缺的工具,有助於簡化API開發和測試流程,提高效率並確保API的可靠性。

上面這段說的沒錯,基本上後端 API 開發都會用到它,使用起來也很容易~
(請讓我偷懶省略基本介紹XD)

安裝

進到 Postman 官網 後,在左下方就可以找到桌面版的下載按鈕,大家只要選擇自己的作業系統就可以開始下載安裝檔了。

postman

除了桌面版,Postman 在今年也釋出了 VS code 擴充程式版,常用的功能都有支援,操作上也幾乎都一樣,如果你本來就有在使用 VS code 的進行開發,可以把這個版本納入考量

postman vscode

使用

首先,建立一個新的 collection (這邊是以 ironman 為例,其他則是我自己過去開發時建立的,請忽略XD)

接下來,點擊「...」內的「Add request」

就成功建立一個空白的 request 了 (預設叫 New Request)

接下來,在輸入框內輸入要測試的網址 http://127.0.0.1:8000/items (這邊繼續沿用昨天最後的程式),按下「Send」後,就可以在下方看到回傳的結果了

如果要添加參數,在下方的 Params 的表格內輸入參數,同時你也會發現,上方的網址會自動發生調整成正確的格式,最後送出後,就可以看到新的結果了 (昨天一樣)

若要測試其他 HTTP 方法,則透過輸入框左邊的下拉選單進行選擇就好~

POST + FormData

接下來我們來設定用 POST 搭配 FormData 的路由

from fastapi import FastAPI, Form

app = FastAPI()

@app.post("/login")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

需要再安裝一個 python 套件:python-multipart
pip install python-multipart

在上面的程式中,我們要求要有兩個參數,分別是 usernamepassword ,型別都是字串,並且指定它是 Form 物件。此時,我們就可以用 FormData 的方式送參數到後端了。

注意!沒有指定是 Form 物件的話,FastAPI 會認定是 Query Parameter

下面這個是沒有加參數的情況

得到了 422 的錯誤,這是因為 FastAPI 檢查是否帶有參數時,發現不符合,因此就回傳預設的錯誤訊息 (告知少了什麼欄位)

接下來讓我們來添加這兩個必要參數

在下方的 Body 選擇 form-data

在表格內輸入參數後送出,就可以看到正確的回應了

其他作法

早期還有另一種寫法 (但不建議)

from fastapi import FastAPI, Request

app = FastAPI()

@app.post("/login")
async def login(request: Request):
    _form = await request.form()
    username = _form["username"]
    password = _form["password"]
    return {"username": username}

它也可以拿到上面的正確回應,但它沒有有效地使用 FastAPI 內建的型別檢查,因此當有缺少欄位時,會是在 username = _form["username"] 這行才出錯,也因此,被判定為 500 的錯誤

這會造成開發時的 debug 的難度提高,同時前端也會完全不知道發生什麼事,只知道後端出錯了

POST + JSON

如果不喜歡 FormData,也可以選擇使用 JSON 格式,但程式碼要做點調整

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    username: str
    password: str

@app.post("/login")
async def login(user: User):
    return {"username": user.username}

在下方的 Body 選擇 raw,並切換成 JSON 格式,並輸入這段 JSON 後送出

{
    "username": "ithome",
    "password": "ironman"
}

就可以得到正確回應了

如果有少欄位,則會收到 422 錯誤

重點整理

今天就介紹的這邊了,上面我們介紹了

  1. Postman 的基本使用方法
  2. POST + FormData 的路由設定
  3. POST + JSON 的路由設定

大家可以思考一下比較喜歡哪種做法XD

明天會開始介紹面對越來越多的 API,該怎進行管理,以及專案架構應該怎麼設計~


上一篇
[Day 04] 路由設計:RESTful API
下一篇
[Day 06] API 管理與 API 文件
系列文
FastAPI 開發筆記:從新手到專家的成長之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言